﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace INSTA.Concepts.CreateEvents
{
    /// <summary>
    /// 
    /// </summary>
    public class Program
    {
        static void Main(string[] args)
        {
            Test_Person_01();
        }

        public static void Test_Person_01()
        {
            var persons = new List<Person>
                              {
                                  new Person(), 
                                  new Person(), 
                                  new Person(), 
                                  new Person()
                              };

            // On parcourt la liste de Person
            foreach (var p in persons)
            {
                // STEP 4
                // On s'abonne à l'event "NameChanged" de l'objet p,
                // et on abonne la procédure "HandleEvent"
                p.NameChanged += HandleEvent;

                // On fait en sorte que notre event se déclenche
                // sur l'objet en cours.
                p.Name = "toto";
            }
        }

        /// <summary>
        /// STEP 5 :
        /// Méthode qui gère l'event
        /// </summary>
        public static void HandleEvent(object sender, PersonEventArgs e)
        {
            var sb = new StringBuilder();

            // On recaste le sender en Person..
            Person p = sender as Person;
            sb.AppendFormat("Le Nom de la Personne a changé {0} New Name : {1}{0}FirstName : {2}{0} HashCode : {3}", 
                            Environment.NewLine,
                            e.NewName,
                            e.FirstName,
                            sender.GetHashCode());

            Console.WriteLine(sb.ToString());
        }

    }
}
